﻿using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace ReplaceCsv.ListBoxItem
{
    /// <summary>
    /// ファイル名を取得した場合に、
    /// チェックボックスなどで表示をする際、
    /// ディレクトリ名と、ファイル名を切り分けて
    /// 表示するためのクラス
    /// （本クラスはスレッドセーフに設計していないので注意）
    /// </summary>
    class FileNameCupsule : Object
    {
        private string fileName = "";
        private string fullName = "";

        /// <summary>
        /// デフォルトコンストラクタは隠ぺい
        /// </summary>
        private FileNameCupsule()
        {
        }
        public FileNameCupsule(string fileFullPathName)
        {
            //コメントは参考ロジック。。。。
            //string dir = Path.GetDirectoryName(fileFullPathName);
            //string fName = Path.GetFileNameWithoutExtension(fileName);
            //string ext = Path.GetExtension(fileName);
            this.fileName = Path.GetFileName(fileFullPathName);
            this.fullName = Path.GetFullPath(fileFullPathName);
        }
        /// <summary>
        /// toString()メソッドで表示する表示モードを示す
        /// </summary>
        private enum Mode{
            FileName,
            FullName
        }
        private Mode nowMode = Mode.FileName;

        /// <summary>
        /// ToStringメソッドで表示するモードをファイル名のみとする
        /// </summary>
        public void setFileNameMode()
        {
            this.nowMode = Mode.FileName;
        }
        /// <summary>
        /// ToStringで表示するモードをフルパス表示とする。
        /// </summary>
        public void setFullNameMode()
        {
            this.nowMode = Mode.FullName;
        }
        /// <summary>
        /// チェックボックスなどで利用するアイテム
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            string result = this.fileName;
            switch(this.nowMode){
                case Mode.FileName:
                    result = this.fileName;
                    break;
                case Mode.FullName:
                    result = this.fullName;
                    break;
                default:
                    break;
            }
            return result;
        }
        /// <summary>
        /// プロパティ
        /// </summary>
        public string FilePath{
            get { return this.fullName; }
        }
    }
}
